package rodrigosetti.colorstrike.core;

import rodrigosetti.colorstrike.estados.Abertura;
import rodrigosetti.colorstrike.estados.Fase1;
import rodrigosetti.colorstrike.estados.Fase2;
import rodrigosetti.colorstrike.estados.Fase3;
import rodrigosetti.colorstrike.estados.Menu;
import rodrigosetti.colorstrike.estados.MenuJogo;
import rodrigosetti.colorstrike.estados.MenuPrincipal;
import rodrigosetti.colorstrike.fase.Heroi;
import rodrigosetti.midpgame.Estado;
import rodrigosetti.midpgame.GameCore;
import rodrigosetti.midpgame.Manager;

/**
 * Classe que controle o loop de jogo, a saida grafica e
 * a entrada do jogador.
 */
public class Core extends GameCore {

	public Estado abertura, menu, menuPrincipal, menuAjuda, menuJogo, ajuda;
	public Estado fase1, fase2, fase3;

	public static final int NULO = 0;
	public static final int MENU = 1;

	/**
	 * Inicializa estados e controi a maquina de estados do jogo.
	 */
	public void inicializar() {
		
		/* Instancia estados */
		abertura = new Abertura();
		menuPrincipal = new MenuPrincipal();
		menuJogo = new MenuJogo();
		menu = new Menu();
		
		fase1 = new Fase1();
		fase2 = new Fase2();
		fase3 = new Fase3();

		/* Instancia loading */
		loading = new ColorStrikeLoading();

		/* Istancia manager */
		manager = new Manager(abertura);

		/* Registra instrucoes */
		manager.registrarInstrucao(abertura, MENU, menuPrincipal);

		manager.registrarInstrucao(menuPrincipal, MenuPrincipal.AJUDA, ajuda);
		manager
				.registrarInstrucao(menuPrincipal, MenuPrincipal.JOGAR,
						menuJogo);
		manager.registrarInstrucao(menuPrincipal, MenuPrincipal.SAIR, null);

		manager.registrarInstrucao(menuJogo, MenuJogo.NOVO_JOGO, fase1);
		manager.registrarInstrucao(menuJogo, MenuJogo.CONTINUAR, null);
		manager.registrarInstrucao(menuJogo, MenuJogo.BACK, menuPrincipal);

		manager.registrarInstrucao(fase1, Heroi.GANHOU, fase2);
		manager.registrarInstrucao(fase2, Heroi.GANHOU, fase3);
		manager.registrarInstrucao(fase3, Heroi.GANHOU, menuPrincipal);
	}

}
